package us.proyecto.canarios.domain;

import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.validator.Email;

/**
 * Clase que mapea la tabla ASOCIACION
 * @author Juan Antonio Mena Sánchez
 *
 */
@Entity
@Table(name = "ASOCIACION")
public class Asociacion {

	private int idAsociacion;
	private String nombre;
	private String domicilio;
	private Provincia provincia;
	private Municipio municipio;
	private String codigoPostal;
	private String telefono;
	private String email;
	private Usuario usuario;
	private Set<Criador> listaCriadores;

	/**
	 * Getter de idAsociacion
	 * @return idAsociacion int
	 */
	@Id
    @SequenceGenerator(name = "asociacionId", sequenceName = "CAN_ASOCIACION_SEQ", initialValue = 1, allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "asociacionId")
    @Column(name = "ID_ASOCIACION", nullable = false, precision = 8, scale = 0)
	public int getIdAsociacion() {
		return idAsociacion;
	}

	/**
	 * Setter de idAsociacion
	 * @param idAsociacion int
	 */
	public void setIdAsociacion(int idAsociacion) {
		this.idAsociacion = idAsociacion;
	}
	/**
	 * Getter de domicilio
	 * @return domicilio String
	 */
	@Column(name="DOMICILIO")
	public String getDomicilio() {
		return domicilio;
	}

	/**
	 * Setter de domicilio
	 * @param domicilio String
	 */
	public void setDomicilio(String domicilio) {
		this.domicilio = domicilio;
	}

	/**
	 * Getter de provincia
	 * @return provincia String
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="PROVINCIA")
	public Provincia getProvincia() {
		return provincia;
	}

	/**
	 * Setter de provincia
	 * @param provincia String
	 */
	public void setProvincia(Provincia provincia) {
		this.provincia = provincia;
	}

	/**
	 * Getter de municipio
	 * @return municipio Municipio
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="MUNICIPIO")
	public Municipio getMunicipio() {
		return municipio;
	}

	/**
	 * Setter de municipio
	 * @param municipio String
	 */
	public void setMunicipio(Municipio municipio) {
		this.municipio = municipio;
	}

	/**
	 * Getter de codigoPostal
	 * @return codigoPostal String
	 */
	@Column(name="CODIGO_POSTAL")
	public String getCodigoPostal() {
		return codigoPostal;
	}

	/**
	 * Setter de codigoPostal
	 * @param codigoPostal String
	 */
	public void setCodigoPostal(String codigoPostal) {
		this.codigoPostal = codigoPostal;
	}

	/**
	 * Getter de telefono
	 * @return telefono String
	 */
	@Column(name="TELEFONO")
	public String getTelefono() {
		return telefono;
	}

	/**
	 * Setter de telefono
	 * @param telefono String
	 */
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	/**
	 * Getter de email
	 * @return email String
	 */
	@Email
	@Column(name="EMAIL")
	public String getEmail() {
		return email;
	}

	/**
	 * Setter de email
	 * @param email String
	 */
	public void setEmail(String email) {
		this.email = email;
	}
	/**
	 * Getter de usuario
	 * @return usuario String
	 */
	@OneToOne(fetch = FetchType.LAZY, mappedBy = "asociacion")
	@JoinColumn(name = "FK_USUARIO")
	public Usuario getUsuario() {
		return usuario;
	}

	/**
	 * Setter de usuario
	 * @param usuario String
	 */
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	/**
	 * @return the nombre
	 */
	@Column(name = "NOMBRE", length = 2000)
	public String getNombre() {
		return nombre;
	}

	/**
	 * @param nombre the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

@Override
public boolean equals(Object obj) {
	if(obj instanceof Asociacion){
		Asociacion asoc = (Asociacion) obj;
		if(asoc.getIdAsociacion() == this.getIdAsociacion()){
			return true;
		}
	}
	return false;
}

@Override
public int hashCode() {
	// TODO Auto-generated method stub
	return super.hashCode();
}

@OneToMany(fetch = FetchType.LAZY, mappedBy = "asociacion")
public Set<Criador> getListaCriadores() {
	return listaCriadores;
}

public void setListaCriadores(Set<Criador> listaCriadores) {
	this.listaCriadores = listaCriadores;
}



}
